using System;
using System.Collections.Generic;
using System.Text;
using EntidadesTO;
using System.Data;
using System.Data.SqlClient;

namespace AccesoDatos
{
    public class ClasificacionTarifaDA
    {
        public List<ClasificacionTarifaTO> BuscarPorClasificacion(int pCodClasificacion, DateTime pFechaConsulta, bool pCombo)
        {
            List<ClasificacionTarifaTO> listaClasificacionTarifa = new List<ClasificacionTarifaTO>();
            SqlDataReader reader = null;
            SqlCommand comando;
            ConexionBD instanciaConexion = ConexionBD.ObtenerInstancia();
            //SqlConnection conexion_part = new SqlConnection("Data source=WU\\SQLEXPRESS;Initial Catalog=RentasBD2;integrated security=true");
            //conexion_part.Open();

            try
            {

                instanciaConexion.AbrirConexion();
                comando = new SqlCommand("sp_get_SEC_ClasificacionTarifa_filter", instanciaConexion.ObtenerConexion());
                comando.Parameters.AddWithValue("@pCodClasificacion", pCodClasificacion);
                comando.Parameters.AddWithValue("@pFechaConsulta", pFechaConsulta);
                comando.CommandType = CommandType.StoredProcedure;

                reader = comando.ExecuteReader();
                ClasificacionTarifaTO clasificacionTarifaTO = new ClasificacionTarifaTO();

                if (pCombo)
                {
                    clasificacionTarifaTO.CodCategoria = -1;
                    clasificacionTarifaTO.CodClasificacion = pCodClasificacion;
                    clasificacionTarifaTO.DesClasificacionTarifa = "--Seleccione un elemento--";
                    clasificacionTarifaTO.MontoTarifa = 0;
                    clasificacionTarifaTO.InicioVigencia = DateTime.MinValue;
                    clasificacionTarifaTO.FinVigencia = DateTime.MinValue;
                    clasificacionTarifaTO.Estado = "";
                    clasificacionTarifaTO.CodCampana = 0;

                    listaClasificacionTarifa.Add(clasificacionTarifaTO);
                }

                while (reader.Read())
                {
                    clasificacionTarifaTO = new ClasificacionTarifaTO();
                    clasificacionTarifaTO.CodCategoria = reader.GetInt32(reader.GetOrdinal("codCategoria"));
                    clasificacionTarifaTO.CodClasificacion = reader.GetInt32(reader.GetOrdinal("codClasificacion"));
                    if (reader.GetString(reader.GetOrdinal("desTarifa")).Length > 40)
                        clasificacionTarifaTO.DesClasificacionTarifa = (reader.GetString(reader.GetOrdinal("desTarifa"))).Substring(0,40);
                    else
                        clasificacionTarifaTO.DesClasificacionTarifa = (reader.GetString(reader.GetOrdinal("desTarifa")));
                    clasificacionTarifaTO.MontoTarifa = reader.GetDecimal(reader.GetOrdinal("montoTarifa"));
                    clasificacionTarifaTO.InicioVigencia = reader.GetDateTime(reader.GetOrdinal("inicioVigencia"));

                    if (reader.GetValue(reader.GetOrdinal("finVigencia")) == DBNull.Value)
                        clasificacionTarifaTO.FinVigencia = DateTime.MinValue;
                    else
                        clasificacionTarifaTO.FinVigencia = reader.GetDateTime(reader.GetOrdinal("finVigencia"));

                    if (reader.GetValue(reader.GetOrdinal("estado")) == DBNull.Value)
                        clasificacionTarifaTO.Estado = "";
                    else
                        clasificacionTarifaTO.Estado = reader.GetString(reader.GetOrdinal("estado"));

                    if (reader.GetValue(reader.GetOrdinal("codCampana")) == DBNull.Value)
                        clasificacionTarifaTO.CodCampana = -1;
                    else
                        clasificacionTarifaTO.CodCampana = reader.GetInt32(reader.GetOrdinal("codCampana"));

                    listaClasificacionTarifa.Add(clasificacionTarifaTO);
                }

                reader.Close();
                instanciaConexion.CerrarConexion();
                //conexion_part.Close();
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
                listaClasificacionTarifa = null;

            }
            finally
            {
                if (reader != null)
                {
                    if (reader.IsClosed == false)
                        reader.Close();
                }
                if (instanciaConexion.ObtenerConexion().State != ConnectionState.Closed)
                //if (conexion_part.State != ConnectionState.Closed)
                {
                    instanciaConexion.CerrarConexion();
                    //conexion_part.Close();
                }
                //conexion_part.Dispose();
            }

            return listaClasificacionTarifa;

        }

        public void Actualizar(ClasificacionTarifaTO pClasificacion)
        {
            SqlCommand comando;
            ConexionBD instanciaConexion = ConexionBD.ObtenerInstancia();

            try
            {
                instanciaConexion.AbrirConexion();
                comando = new SqlCommand("sp_upd_SEC_TarifaImpuestoPredial", instanciaConexion.ObtenerConexion());
                comando.Parameters.AddWithValue("@pCodClasificacion", pClasificacion.CodClasificacion);
                comando.Parameters.AddWithValue("@pCodCategoria", pClasificacion.CodCategoria);
                comando.Parameters.AddWithValue("@pDesTarifa", pClasificacion.DesClasificacionTarifa);
                comando.Parameters.AddWithValue("@pMontoTarifa", pClasificacion.MontoNuevo);
                comando.Parameters.AddWithValue("@pFechaInicioVig", pClasificacion.InicioVigencia);                

                comando.CommandType = CommandType.StoredProcedure;

                comando.ExecuteNonQuery();

                instanciaConexion.CerrarConexion();
            }
            catch (SqlException ex)
            {
                throw ex;
            }
            finally
            {
                if (instanciaConexion.ObtenerConexion().State != ConnectionState.Closed)
                {
                    instanciaConexion.CerrarConexion();
                }
            }
        }
    }
}
